import json

from django.utils.deprecation import MiddlewareMixin
from django.http import JsonResponse
import time

from management import models
from utils import myredis
from utils.myjwt import mjwt


class PermitionMiddleware(MiddlewareMixin):
    def process_request(self, request):
        # 定义白名单
        wlist = ['/management/login/', '/management/code/']
        # 获取token，url指的是接口地址
        url = request.path
        if url not in wlist:
            # 解析验证
            try:
                token = request.headers.get('Authorization')
                data = mjwt.jwt_decode(token)
                # 是否过期
                if int(time.time()) > int(data['exp']):
                    print("过期")
                    return JsonResponse({"code": 401})
                # 是否有权限操作
                userid = data['id']
                # 查询用户表，获取roleid
                user = models.User.objects.filter(id=userid).first()
                roleid = user.rid.id
                # 查询redis根据roleid
                my = myredis.Mredis()
                plist = my.get_str('res' + str(roleid))
                # 如果存在判断url是否在权限列表中 json.loads()
                if plist:
                    plist = json.loads(plist)
                    if url not in plist:
                        print("没有权限")
                        return JsonResponse({"code": 401})
                else:
                    print("redis没有数据")
                    return JsonResponse({"code": 401})
                    # 如果不存在，根据角色获取资源列表，存入redis
                    # 从redis中获取token,如果存在，说明已经退出，返回401没有权限操作
            except:
                print("token解析失败")
                return JsonResponse({"code": 401})
            # 是否退出